<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport"
        content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>js对象之基础</title>
</head>
<body>
  <ul>
    <li>可通过字面量({})定义对象，在对象内部定义属性和方法(即之前的函数)</li>
    <li>可通过对象.属性/方法或对象['属性/方法']来访问对象成员，可使用delete删除对象成员</li>
    <li>当属性或方法是动态的或不符合标准命名时，只能使用对象['属性/方法']来访问</li>
    <li>对象是引用类型，当对象赋值或作为函数参数时，都是传递引用地址，赋值后或经函数调用后都会发生变化</li>
  </ul>
  <script>
    const user = {
      name: 'Miracle',
      age: 35,
      show() {
        console.log(`${this.name} is ${this.age} years old.`)
      }
    }
    console.log(user.name)          // Miracle
    console.log(user['age'])        // 35
    user.show()                     // Miracle is 35 years old.
    delete user.show
    for (const key in user) {
      console.log(key, user[key])   // name Miracle, age 35
    }
    // 基础类型与引用类型
    function add(a) {
      a += 10
      console.log('add', a)
    }
    function addProp(obj) {
      obj.age = 35
      console.log('addProp', obj)
    }
    const a = 1, obj = { name: 'Miracle' }
    add(a)                          // add 11
    addProp(obj)                    // addProp {name: "Miracle", age: 35}
    console.log('a', a)             // a 1
    console.log('obj', obj)         // obj {name: "Miracle", age: 35}
  </script>
</body>
</html>